#include <Arduino.h>
#include <Wire.h>
#include <WiFi.h>               // 引入 WiFi 库
#include <NTPClient.h>  
#include <U8g2lib.h>         // 引入 NTPClient 库
#include <WiFiUdp.h>             // 引入 WiFi UDP 库
#include <Adafruit_GFX.h>        // 引入 Adafruit GFX 库
#include <TimeLib.h>             // 引入 TimeLib 库

#define SCREEN_WIDTH 128         // OLED 屏幕宽度
#define SCREEN_HEIGHT 64         // OLED 屏幕高度
#define OLED_RESET    -1         // OLED 屏幕重置引脚，没有可以设置为 -1

// 创建 OLED 显示对象
U8G2_SSD1309_128X64_NONAME0_F_SW_I2C u8g2(U8G2_R0, 21, 22);

// Wi-Fi 配置
const char* ssid     = "xiaomiwifi";      // 你的 Wi-Fi 网络名
const char* password = "xayn@1216@ynxa";  // 你的 Wi-Fi 密码

// 设置 NTP 客户端
WiFiUDP udp;
NTPClient timeClient(udp, "pool.ntp.org", 0, 3600000); // 获取 UTC 时间，更新时间间隔 1小时（3600000毫秒）

void setup() {
  // 启动串口，用于调试
  Serial.begin(115200);

  // 初始化 OLED 屏幕
  u8g2.begin();

  u8g2.enableUTF8Print();
  u8g2.setFont(u8g2_font_wqy12_t_gb2312);

  // 连接 Wi-Fi
  Serial.println("Connecting to Wi-Fi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected to Wi-Fi!");

  // 启动 NTP 客户端
  timeClient.begin();
  timeClient.update();  // 获取初始时间
}

void loop() {
  timeClient.update();  // 更新 NTP 时间
  Serial.println("debug1 !");

  // 获取时间戳（epoch 时间）
  unsigned long epochTime = timeClient.getEpochTime();
  Serial.println(epochTime);

  // 使用 TimeLib 解析时间
  setTime(epochTime);  // 设置系统时间

  // 获取当前的年、月、日、星期、时、分、秒
  int hours = hour() + 8; // 获取小时，并转换为北京时间 (UTC + 8)
  if (hours >= 24) {
    hours -= 24;
  }
  int minutes = minute();
  int seconds = second();

    Serial.println(hours);
    Serial.println(minutes);
    Serial.println(seconds);
  // 显示日期、星期和时间
  u8g2.clearBuffer();
  u8g2.setCursor(0, 20);      // 设置光标位置

  // 显示时间：时:分:秒
  u8g2.print(hours);
  u8g2.print(":");
  if (minutes < 10) u8g2.print("0"); // 如果分钟数小于 10，前面补零
  u8g2.print(minutes);
  u8g2.print(":");
  if (seconds < 10) u8g2.print("0"); // 如果秒数小于 10，前面补零
  u8g2.println(seconds);

  u8g2.sendBuffer();  // 刷新 OLED 显示内容

  delay(1000);  // 每两秒更新一次

  u8g2.clearBuffer();
}
